#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
创建管理员用户脚本
账号: admin
密码: 123456
"""

import os
import sys
from dotenv import load_dotenv

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 加载环境变量
load_dotenv()

from app import app
from models.models import db, User

def create_admin():
    """创建管理员用户"""
    
    print("🚀 开始创建管理员用户...")
    
    with app.app_context():
        try:
            # 检查是否已存在admin用户
            existing_admin = User.query.filter_by(username='admin').first()
            
            if existing_admin:
                print("⚠️  管理员用户已存在!")
                print(f"   用户名: {existing_admin.username}")
                print(f"   角色: {existing_admin.role}")
                print(f"   ID: {existing_admin.id}")
                
                # 询问是否重置密码
                choice = input("\n是否重置管理员密码为123456? (y/N): ").strip().lower()
                if choice in ['y', 'yes']:
                    existing_admin.set_password('123456')
                    db.session.commit()
                    print("✅ 管理员密码已重置为: 123456")
                else:
                    print("❌ 操作已取消")
                return
            
            # 创建新的管理员用户
            admin_user = User(
                username='admin',
                age=30,
                gender='男',
                ethnicity='汉族',
                mandarin_level='一级甲等',
                role='admin'  # 设置为管理员角色
            )
            
            # 设置密码
            admin_user.set_password('123456')
            
            # 保存到数据库
            db.session.add(admin_user)
            db.session.commit()
            
            print("✅ 管理员用户创建成功!")
            print("=" * 40)
            print(f"👤 用户名: admin")
            print(f"🔑 密码: 123456")
            print(f"🎭 角色: admin")
            print(f"🆔 用户ID: {admin_user.id}")
            print("=" * 40)
            print("📝 请在生产环境中及时修改默认密码!")
            
        except Exception as e:
            print(f"❌ 创建管理员失败: {str(e)}")
            db.session.rollback()
            sys.exit(1)

def verify_admin():
    """验证管理员用户"""
    
    print("\n🔍 验证管理员用户...")
    
    with app.app_context():
        try:
            admin_user = User.query.filter_by(username='admin').first()
            
            if not admin_user:
                print("❌ 管理员用户不存在")
                return False
            
            # 验证密码
            if admin_user.check_password('123456'):
                print("✅ 管理员用户验证成功!")
                print(f"   用户名: {admin_user.username}")
                print(f"   角色: {admin_user.role}")
                print(f"   密码验证: 通过")
                return True
            else:
                print("❌ 管理员密码验证失败")
                return False
                
        except Exception as e:
            print(f"❌ 验证失败: {str(e)}")
            return False

def test_admin_login():
    """测试管理员登录"""
    
    print("\n🧪 测试管理员登录...")
    
    try:
        import requests
        
        # 测试登录API
        login_data = {
            "username": "admin",
            "password": "123456"
        }
        
        response = requests.post(
            "http://localhost:5000/api/admin/login",
            json=login_data,
            timeout=10
        )
        
        result = response.json()
        
        if result.get('code') == 200:
            print("✅ 管理员登录测试成功!")
            print(f"   Token: {result['data']['token'][:50]}...")
            print(f"   用户信息: {result['data']['user']}")
        else:
            print(f"❌ 管理员登录测试失败: {result.get('message')}")
            
    except requests.exceptions.ConnectionError:
        print("⚠️  无法连接到服务器，请确保应用正在运行 (python app.py)")
    except Exception as e:
        print(f"❌ 登录测试失败: {str(e)}")

def main():
    """主函数"""
    
    print("🎯 音频收集系统 - 管理员创建工具")
    print("=" * 50)
    
    # 检查数据库连接
    try:
        with app.app_context():
            # 测试数据库连接
            db.engine.connect()
            print("✅ 数据库连接正常")
    except Exception as e:
        print(f"❌ 数据库连接失败: {str(e)}")
        print("请检查:")
        print("1. MySQL服务是否启动")
        print("2. .env文件配置是否正确")
        print("3. 数据库是否已创建")
        sys.exit(1)
    
    # 创建管理员
    create_admin()
    
    # 验证管理员
    if verify_admin():
        # 测试登录
        test_admin_login()
    
    print("\n🎉 管理员创建流程完成!")
    print("\n📋 后续步骤:")
    print("1. 启动应用: python app.py")
    print("2. 访问管理后台 (如果有前端)")
    print("3. 使用 admin/123456 登录")
    print("4. 及时修改默认密码")

if __name__ == "__main__":
    main()
